Computer systems use expansion read-only memory (ROM) code to initialize specific devices in the computer systems. Often, the expansion ROM code is used while the computer system is booting up. For example, the expansion ROM code of a video graphics array (VGA) device enables video output functionality for the computer system. In another example, the expansion ROM code of a storage device can initialize a hard drive disk and expose it to BIOS while the computer system is booting up.
Running the expansion ROM code can initialize important firmware devices in a computer system, such as graphics card and hard disk drives. These firmware devices are not easily initialized without the expansion ROM code running properly during the system boot up. Therefore, a computer system can have reduced functionality when no expansion ROM code exists to initialize a specific device. The computer system can also fail to properly initialize a specific device when the expansion ROM code is invalid or not up to date.
Expansion ROM code is often stored on a computer bus card. The computer bus card, also known as an expansion card or adapter card, provides the main power-up instructions of initializing this card for the computer system. When expansion ROM code is stored on the computer bus card, the computer system can easily access the code and run the code during power up. However, there are several problems with this approach. In particular, if users need to replace the computer bus card for any reason, it is not easy to tell whether a new computer bus card will have the appropriate expansion ROM code on the replacement card. Without the appropriate expansion ROM code on the card, it is typically an onerous process for the user to initialize the specific devices. The user must complete a manual initialization process by retrieving appropriate expansion ROM code and manually putting it onto the computer bus card.
In some instances, expansion ROM code is stored in a location accessible by the computer system, but not on the computer bus card. However, many conventional computer systems do not support accessing expansion ROM codes stored in other locations. Such computer systems are also generally incapable of determining which expansion ROM code is the preferred code for execution in circumstances where multiple copies of expansion ROM code exist in a computer system.
Additionally, it is difficult for users to update the expansion ROM code if it is out of date. For example, users typically need to either update the expansion ROM code manually, or replace the computer bus card itself with a bus card that has updated expansion ROM code. In order to manually update the expansion ROM code, users need to retrieve the ROM image from FAE (Field Application Engineer) of the computer bus card vendor or download it from the vendor's website. The user then needs to copy the ROM image into a storage device (e.g. USB flash key). The user then needs to power on the system with the original computer bus card and boot to operating system. Then the user needs to use a vendor-specific utility to flash or update the ROM image of expansion card.
Therefore, what is needed is a system or method which can access expansion ROM code in any of a plurality of repositories accessible by the computer system when the expansion ROM code is missing or out-of-date from the computer bus card.